from django import http
from django.core import cache
from django.http import JsonResponse
from django.shortcuts import render
from django.views import  View
# Create your views here.
from django.core.cache import cache

from users.models import Address
from .models import Area


class ProVinceView(View):
    def get(self,request):


            # 增加: 判断是否有缓存
            province_list = cache.get('province_list')

            if not province_list:
                try:
                    province_model_list = Area.objects.filter(parent__isnull=True)

                    province_list = []
                    for province_model in province_model_list:
                        province_list.append({'id': province_model.id,
                                              'name': province_model.name})

                    # 增加: 缓存省级数据
                    cache.set('province_list', province_list, 3600)
                except Exception as e:
                    return http.JsonResponse({'code': 400,
                                              'errmsg': '省份数据错误'})

            return http.JsonResponse({'code': 0,
                                      'errmsg': 'OK',
                                      'province_list': province_list})
class SubAreasView(View):
    def get(self,request,pk):
        """提供市或区地区数据
              1.查询市或区数据
              2.序列化市或区数据
              3.响应市或区数据
              4.补充缓存数据
              """

        try:
            # 1.查询市或区数据
            sub_model_list = Area.objects.filter(parent=pk)
            #  查询省份数据
            parent_model = Area.objects.get(id=pk)

            # 2.整理市或区数据
            sub_list = []
            for sub_model in sub_model_list:
                sub_list.append({'id': sub_model.id,
                                 'name': sub_model.name})

            sub_data = {
                'id': parent_model.id,  # pk
                'name': parent_model.name,
                'subs': sub_list
            }

        except Exception as e:
            return http.JsonResponse({'code': 400,
                                      'errmsg': '城市或区县数据错误'})

        # 3.响应市或区数据 ok: 0
        return http.JsonResponse({'code': 0,
                                  'errmsg': 'OK',
                                  'sub_data': sub_data})


